package com.example.onlinemusic.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 配置类
 * 实现WebMvcConfigurer说明是对SpringMVC配置进行扩展
 */
@Configuration
public class AppConfig implements WebMvcConfigurer {

    // 注册密码加密对象到Spring容器中
    @Bean
    public BCryptPasswordEncoder getBCryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }

    /**
     * 添加拦截器：
     * @param registry 拦截器注册对象
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        //登录之后才能访问其他的页面.....
        // 创建自定义拦截器：验证是否登录
        LoginInterceptor loginInterceptor = new LoginInterceptor();

        // 将拦截器注册到SpringMVC中
        registry.addInterceptor(loginInterceptor).
                // 添加要拦截的路径，**表示任意多级路径，/**就是拦截所有路径
                addPathPatterns("/**")
                // 排除前端js目录下所有js后缀文件
                .excludePathPatterns("/js/**.js")
                //排除前端images目录下所有文件：图片
                .excludePathPatterns("/images/**")
                // 排除前端css目录下所有css后缀文件
                .excludePathPatterns("/css/**.css")
                // 排除前端fronts目录下所有文件：字体
                .excludePathPatterns("/fronts/**")
                // 排除前端player目录下所有文件：播放器相关
                .excludePathPatterns("/player/**")
                // 排除登录页面
                .excludePathPatterns("/login.html")
                //排除登录接口
                .excludePathPatterns("/user/login");
    }
}
